[iOS 8] 15分で作れる CI 環境構築
iOSアプリにも継続的インテグレーション環境を
こんにちは!今日からMacDownでブログを書いています。荒川です。
モダンなWeb開発では馴染み深くなってきた、CI(継続的インテグレーション)環境を iOS 開発でも弊社では積極的に取り入れています。社内での共有も兼ねて、今回は簡単にまとめます。
「継続的インテグレーション」と聞くととても難しそうで、設定も大変そうです。ですので、最低限コピペで作れる程度の環境構築方法を紹介します。
iOS 開発での CI とは何かを詳しく知りたい方は、弊社諏訪の記事 iOSアプリ開発でCI/継続的デリバリ環境を始めるための4種の神器 を参考にしてください。
今回構築する環境は、以下に該当する方に最適です。
- gitを使って iOS 開発を行っている。
- チーム内でチャットツールを使っていて、そのAPIが公開されている。
- テストコードを書いている。または、そのうち書きたい。
- GitHub でリモートのリポジトリを共有している。
- GitHub のPull Requestをマージする前に、そもそもビルドがしっかり通っているかクリーンな環境で確認したい。
開発環境
- Mac OS X Yosemite
- Xcode 6.1
- iOS SDK 8.1
- CocoaPods 0.34.4
- ChatWork(チャットツール)
- GitHub(共有リポジトリ)
- Travis CI(公開リポジトリ用の.orgドメイン、Privateなリポジトリは.comドメイン)
チャットツールはAPIが公開されていれば、どのサービスでも結構です。チャットツールのAPIトークンを利用するため、 GitHub と Travis CI は必ずプライベートリポジトリ にして下さい。公開リポジトリを使用する時は、チャットツールの設定を省略して下さい。
まずは、各サービスにログインし、作業リポジトリを作成して下さい。
iOS × Travis CI 環境を作るための4ステップ
Travis CI は GitHub で管理されているリポジトリに、簡単な設定を追加するだけで CI 環境を提供してくれるWebサービスです。
同じようなサービスの Jenkins と異なる点は、
- GitHub に依存している。
- 環境構築が設定ファイル(.travis.yml)で簡単に行える。
- ビルド環境を Travis 側が提供してくれる。
などがあります。
Travis の VM 上でビルドの度に使い捨ての環境が立ち上がるようです。これによって常にクリーンな状態からビルドが行えます。
順番に連携の仕方を紹介します。
1. Travis CI Webコンソールから対象リポジトリの設定
Travis CI には GitHub アカウントでログインできます。 ログイン後に対象リポジトリを Travis でビルドするためのチュートリアルが表示されますので、その通りに進めてください。
2. 設定ファイルの作成
まず、「.git」 ディレクトリと同階層に 「.travis.yml」 を作成します。
ターミナルからリポジトリのディレクトリまで移動し、以下を入力します。
vi .travis.yml
language: objective-c before_install: - gem install cocoapods -v '0.34.4' - pod install script: - xctool -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO - xcodebuild -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -destination 'platform=iOS Simulator,name=iPhone 6' test after_success: - chmod 755 chatwork.sh - ./chatwork.sh
現在 Travis でのパッケージ管理を行う homebrew では、 xctool の iOS 8.1 以降のテストに対応していないため、テストビルドは xcodebuild を使っています。xctool の方がログが整形されていて見やすいですが、Xcode 標準のビルドツールより新 OS への対応が遅いです。xctool は Facebook の OSSです。
-
- YOURPROJECT.xcworkspace と YOURSCHEME それぞれにプロジェクトに適した名前をつけてください。
- CocoaPods を利用するためには、Podfile が必要です。
- テストを書いていない場合は、「- xcodebuild -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -destination 'platform=iOS Simulator,name=iPhone 6' test」 の箇所を消してください。
- チャットツールを使わない場合は、「after_success:」以降を消してください。
3. チャットツールとの連携
「.travis.yml」と同階層に「chatwork.sh」を作成します。
vi chatwork.sh
#!/usr/bin/env sh CHATWORKTOKEN=(チャットワークのトークンが入ります。) CHATWORKROOMID=(チャットワークのルームIDが入ります。) # ビルド成功時は develop ブランチのみ通知 if [ ${TRAVIS_TEST_RESULT} -eq 0 ] && [ ${TRAVIS_BRANCH} != "develop" ]; then echo "exit: build success on any branch without develop" exit 0 fi if [ ${TRAVIS_TEST_RESULT} -eq 0 ]; then result="BUILD SUCCESS" else result="BUILD FAILED" fi body=`cat << EOT [info][title]${result} - ${TRAVIS_REPO_SLUG} [/title]branch: ${TRAVIS_BRANCH} commit: https://github.com/${TRAVIS_REPO_SLUG}/commit/${TRAVIS_COMMIT} build: https://magnum.travis-ci.com/${TRAVIS_REPO_SLUG}/builds/${TRAVIS_BUILD_ID} [/info] EOT` echo "$body" script="puts URI.encode_www_form_component('${body}')" encoded=`ruby -r uri -e "${script}"` echo $encoded curl -X POST -H X-ChatWorkToken:$CHATWORKTOKEN -d body=${encoded} https://api.chatwork.com/v1/rooms/$CHATWORKROOMID/messages
以上で設定は終わりです。
ChatWork での API トークンの取得方法については、 ChatWork API ドキュメント - 認証方法 を参考にしてください。
4. Xcode での Scheme の共有設定
Xcode のプロジェクトを外部サービスでビルドしたいときは、スキーム毎に許可を与える必要があります。
以上で全ての環境構築が完了しました。
GitHub の develop ブランチへ push すれば、 Travis で自動ビルド & テストが実行されて、結果がチャットツールへ通知されます。
まとめ
今回は iOS 開発の CI 環境構築の一例を紹介しました。
もちろん「.travis.yml」ファイルを各言語設定に書き換えれば iOS 以外でも CI 環境が構築できます。
既に GitHub をお使いの方は、簡単に出来ますので、構築してみてはいかがでしょうか。